// pages/mainPage/mainPage.js
Page({
  /*搜索相关*/
  showInput: function () {
    this.setData({
      inputShowed: true
    });
  },
  hideInput: function () {
    this.setData({
      inputVal: "",
      inputShowed: false
    });
  },
  clearInput: function () {
    this.setData({
      inputVal: ""
    });
  },
  inputTyping: function (e) {
    this.setData({
      inputVal: e.detail.value
    });
  },
  _inputConfim: function(){
    console.log('用户点击确定，最终的值为：', this.data.inputVal)
    //跳转到搜索结果页面，并把用户的输入传递过去，参数名为 keyword
    wx.navigateTo({
      url: '/pages/searchRes/searchRes?keyword=' + this.data.inputVal,
    })
  },
  /*切换子选项卡*/
  _changeChild: function(e){
    console.log("index.js _changeChild\n",e)
    console.log("index.js _changeChild currentSwiperID before =",this.data.currentSwiperID)
    this.setData({
      currentSwiperID: e.detail.currentId
    })
    console.log("index.js _changeChild currentSwiperID after =",this.data.currentSwiperID)
    console.log("index.js B items=",)
    if(this.data.swiperitems.length != 0){
      this._getArticles()
    }
  },
  /*改变swiper-item的数量*/
  _changeSwiperitems: function(e){
    console.log("index.js _changeSwiperitems\n", e)
    let a = e.detail.Items
    this.setData({
      swiperitems: a
    })
    if(this.data.swiperitems != 0){
      this._getArticles()
    }
  },
  /*swiper切换*/
  _handlerChange: function(e){
    console.log("index.js _handlerChange\n",e)
    this.data.currentSwiperID = e.detail.current
    if(e.detail.source === "touch"){
      // 然后调用组件的方法改变子类的选择
      let t = this.selectComponent("#mainbar")
      t._changeC(e.detail.current)
    }
  },
  /*请求文章数据，并使用setData进行渲染，服务端返回最多10条*/
  _getArticles: function(e=undefined, isLoadMore=false){
    console.log("index.js _getArticles\n",e)
    let c = this.data.swiperitems[this.data.currentSwiperID] /*需要获取的文章的类别*/
    console.log("c=",c)
    /*检查是否已有数据*/
    if(this.data.articlesData[c]){ /*已有*/
      if(isLoadMore){/*加载更多，可以先读取现有的数据的条数，然后传递给云函数*/
        console.log("loadMore")
        let length = this.data.articlesData[c].length //当前的条数
        wx.cloud.callFunction({name: "getArticles", data: {category: c, start: length}}).then(res => {
          console.log(res)
          let data = res.result
          let datalength = data.length
          if(datalength == 0){//未获取到数据
            return 0 //无数据，返回0
          }else{
            for(let i = 0; i < datalength; i++){
              this.data.articlesData[c].push(data[i])
            }
            this.setData({
              articlesData:this.data.articlesData
            }, ()=>{
              this._setScrollViewHeight((this.data.articlesData[c].length) * 95)
            })
            return 1 //有数据，返回1
          }
        })
      }else{/*只是简单的切换*/
        console.log("not loadMore")
        this.setData({
          currentSwiperID: this.data.currentSwiperID
        }, ()=>{
          this._setScrollViewHeight((this.data.articlesData[c].length) * 95)
        })
      }
    }else{/*暂无，则请求*/
      console.log("nothing")
      wx.cloud.callFunction({name: "getArticles", data:{category: c}}).then(res =>{
        console.log(res)
        console.log("no")
        this.data.articlesData[c] = res.result
        this.setData({articlesData:this.data.articlesData}, ()=>{
          //修改scroll-view
          wx.getSystemInfo({
            success: (res) => {
              wx.createSelectorQuery().select('#articles').boundingClientRect(rect => {
                let t1 = rect.height
                console.log("rect height = ",t1)
                this._setScrollViewHeight(t1)
              }).exec()
            },
            fail: (err) => {
              console.log(err)
            }
          })
          //修改scroll-view完毕
        })
      }).catch(err => {
        console.log(err)
      })   
    }
  },
  _setScrollViewHeight(h){
    console.log("index.js _setScrollViewHeight, get:", h)
    let t = this.data.swiperMaxHeight
    if(h < this){
      this.setData({scrollViewHeight:h})
    }else{
      this.setData({scrollViewHeight:t})
    }
  },

  /*自定义的上拉刷新*/
  _loadMore: function () {
    console.log('触发上拉事件')
    if(this.data.touchend){ //如果触摸结束，防止重复请求事件
      this.setData({h2:false}) //显示weui的loadmore相关组件
      console.log('加载数据')
      this.data.touchend = false /*恢复初始状态*/
      //请求数据
      if(this._getArticles(undefined, true) == 0){
          console.log('没有更多数据')
          this.setData({
            hideloadmore: true
          }, ()=>{ //或者将延时取消显示更改为给一个小的短暂显示的提示框
            setTimeout(() => {
              this.setData({h2:true, hideloadmore: false}) //取消显示weui的loadmore相关组件，并更改下次显示为正在加载
            }, 1000)
          })
      }else{
        this.setData({h2:true}) //取消显示weui的loadmore相关组件
      }
      console.log('加载完毕')
    }
  },
  _handlerTouchEnd: function(){ /*用于判断上拉刷新是否已经结束，防止重复刷新*/
    console.log('touchend')
    this.data.touchend = true
  },
  /**
   * 页面的初始数据
   */
  data: {
    /*以下用于搜索框*/
    inputShowed: false,
    inputVal: "",
    /*以上用于搜索框*/
    swiperMaxHeight: 500,
    scrollViewHeight: 0, /*用于设置scroll-view的高度*/
    touchend: true, //修改该数据时，未使用setData，所以视图层和逻辑层数据不一致，请以逻辑层为准
    hideloadmore: false, /*控制显示哪个loadmore*/
    /*页面可用的高度，用于设置swiper和scroll-view的高度*/
    currentSwiperID: 0,/*切换选项卡*/
    swiperitems: [],/*swiper-item的数量*/
    articlesData:{},
    scroll_view_height: 0,
    h1: true,
    h2: true
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    /*获取页面可用的高度，除最上面的bar和最下面的tabbar*/
    wx.getSystemInfo({
      success: (res) => {
        wx.createSelectorQuery().select('#mainbar').boundingClientRect(rect => {
          this.setData({
            swiperMaxHeight: res.windowHeight - rect.height /*res.windowHeight为可使用窗口高度，单位px， rect.height为组件的高度*/
          })
        }).exec()
      },
      fail: (err) => {
        console.log(err)
      }
    })
    //获取调用_changeF和_changeC更改父子分类
    console.log('options=',options)
    let type = options['type'] || ''
    if(type){
      this.data.type = type
    } 
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    if(this.data['type']){
      const i = this.selectComponent('#mainbar')
      i._changeF(this.data.type)
    }
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})